package com.hmdp;


import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

@Slf4j
@SpringBootTest
public class redissonTet {


    @Resource
    private RedissonClient redissonclient;
    private RLock lock;


    @BeforeEach  // 在 执行 每一个 有 @test 注解 方法之前执行一次
    void setup() {
        lock = redissonclient.getLock("order");   // 都是 order 之前是 userID
    }

    @Test
    void method1() throws InterruptedException {
//尝试获取锁
        boolean isLock = lock.tryLock(1L, TimeUnit.SECONDS);  // 设置了 waittime 之后 就可以 重试了
        if (!isLock) {
            log.error("获取锁失败 ....1");
            return;
        }
        try {
            log.info("获取锁成功....1");
            method2();
            log.info("开始执行业务 ... 1");
        } finally {
            log.warn("准备释放锁....1");
            lock.unlock();
        }
    }
    @Test
    private void method2() {
        boolean isLock = lock.tryLock();
        if (!isLock) {
            log.error("获取锁失败 ....1");
            return;
        }
        try {
            log.info("获取锁成功....1");

            log.info("开始执行业务 ... 1");
        } finally {
            log.warn("准备释放锁....1");
            lock.unlock();
        }


    }


}

